#ifndef _SIGNAL_H
#define _SIGNAL_H

#include <sys/types.h>

typedef int sig_atomic_t;
typedef unsigned int sigset_t;  /* 32 bits */

#define SIGHUP		 1
#define SIGINT		 2
#define SIGQUIT		 3
#define SIGILL		 4
#define SIGTRAP		 5
#define SIGABRT		 6
#define SIGIOT		 6
#define SIGUNUSED	 7
#define SIGFPE		 8
#define SIGKILL		 9	/* 用于通知任务退出 */
#define SIGUSR1		10
#define SIGSEGV		11
#define SIGUSR2		12
#define SIGPIPE		13
#define SIGALRM		14
#define SIGTERM		15
#define SIGSTKFLT	16
#define SIGCHLD		17
#define SIGCONT		18	/* 用于通知任务恢复执行 */
#define SIGSTOP		19	/* 强制进程暂停执行 */
#define SIGTSTP		20	/* 请求终端暂停 */
#define SIGTTIN		21	/* 后台任务组试图从终端读取输入（用于防止背景进程从终端读取输入。如果不处理，进程会被暂停） */
#define SIGTTOU		22	/* 后台任务组试图向终端写入输出（用于防止背景进程向终端写入输出。如果不处理，进程会被暂停） */

struct sigaction {
	void (*sa_handler)(int);    /* 信号处理函数 */
	sigset_t sa_mask;           /* 信号掩码 */
	int sa_flags;               /* 信号 */
	void (*sa_restorer)(void);  /* 信号复位函数，通常是运行时库提供 */
};

#endif /* _SIGNAL_H */